package com.librelato.persistencia;

import java.util.ArrayList;
import java.util.List;

import com.librelato.bean.CompradorBean;
import com.librelato.persistencia.config.SQLConfiguracao;
import com.librelato.persistencia.enums.EnumCondicao;
import com.librelato.persistencia.interfaces.ICompradorDao;

public class CompradorDao<P extends CompradorBean> extends DaoGenerico<P> implements ICompradorDao<P> {

	@Override
	public String procuraPorParam(String tabela, String campo, String valor,
			EnumCondicao condicao) {
		return null;
	}

	@Override
	public P salvar(P p) {
		return null;
	}
	
	public void editar(P p) throws Exception {};
	
	public void excluir(P p) throws Exception {};

	@Override
	public void preSalvar(P p) {}
	
	public List<CompradorBean> buscaCompradores(String nome, int tipo)
			throws Exception {

		conn = null;
		ps = null;
		rs = null;
		query = null;
		List<CompradorBean> listaComp = new ArrayList<CompradorBean>();
		CompradorBean compra;
		try {	
			conn = GerenciadorConexao.getConexao();
			if (tipo == 1) {
				query = SQLConfiguracao.getInstance().getValor(
						"localiza_compradores_nome");
			} else if (tipo == 2) {
				query = SQLConfiguracao.getInstance().getValor(
						"localiza_compradores_codigo");
			}
			ps = conn.prepareStatement(query);
			ps.setString(1, "%%" + nome.toUpperCase() + "%%");
			rs = ps.executeQuery();
			while (rs.next()) {
				compra = new CompradorBean();
				compra.setCodigo(rs.getString("Y1_COD"));
				compra.setNome(rs.getString("Y1_NOME"));
				compra.setCodCompMicro(rs.getString("Y1_USER"));
				listaComp.add(compra);
			}
			return listaComp;
		} catch (Exception e) {
			e.printStackTrace();
			throw e;
		} finally {
			super.fecharRecursos(ps, rs);
		}
	}
	
	@Override
	public CompradorBean verificaComprador(String cod) throws Exception {
		conn = null;
		ps = null;
		rs = null;
		query = null;
		CompradorBean compraBean = null;
		try {	
			conn = GerenciadorConexao.getConexao();
			query = SQLConfiguracao.getInstance().getValor("localiza_comprador");
			ps = conn.prepareStatement(query);
			ps.setString(1, cod);
			rs = ps.executeQuery();
			if (rs.next()) {
				compraBean = new CompradorBean();
				compraBean.setCodigo(rs.getString("Y1_COD"));
				compraBean.setNome(rs.getString("Y1_NOME"));
				compraBean.setCodCompMicro(rs.getString("Y1_USER"));
			}
			return compraBean;
		} catch (Exception e) {
			e.printStackTrace();
			throw e;
		} finally {
			super.fecharRecursos(ps, rs);
		}
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<P> buscaCompradoresFilial(String filial) throws Exception {
		
		List<CompradorBean> compradores = new ArrayList<CompradorBean>();
		CompradorBean comprador;
		try {
			conn = GerenciadorConexao.getConexao();
			query = SQLConfiguracao.getInstance().getValor("localiza_comprador_filial");
			ps = conn.prepareStatement(query);
			ps.setString(1, filial);
			rs = ps.executeQuery();
			while(rs.next()) {
				comprador = new CompradorBean();
				comprador.setCodigo(rs.getLong("IDUSER")+"");
				comprador.setCodCompMicro(rs.getString("Y1_COD"));
				comprador.setNome(rs.getString("NOME").trim());
				compradores.add(comprador);
			}
		}catch (Exception e) {
			throw e;
		}
		return (List<P>) compradores;
	}

	@SuppressWarnings("unchecked")
	public List<P> buscaCompradoresFiltro() throws Exception{
		
		CompradorBean comprador = null;
		List<CompradorBean> compradores = new ArrayList<CompradorBean>();
		try {
			conn = GerenciadorConexao.getConexao();
			query = SQLConfiguracao.getInstance().getValor("localiza_compradores");
			ps = conn.prepareStatement(query);
			rs = ps.executeQuery();
			while(rs.next()) {
				comprador = new CompradorBean();
				comprador.setCodigo(rs.getString("Y1_COD"));
				comprador.setNome(rs.getString("Y1_NOME").trim());
				comprador.setCodCompMicro(rs.getString("Y1_USER"));
				compradores.add(comprador);
			}
		}catch(Exception e) {
			throw e;
		}
		
		return (List<P>) compradores;
	}

}
